package accesoDatos.usuarios.entidades.daos;

import accesoDatos.usuarios.entidades.Usuarios;
import java.io.Serializable;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;

public class UsuariosJpaController implements Serializable {

    public String create(Usuarios usuario, EntityManager emc) {
        emc.getTransaction().begin();
        try {
            usuario = emc.merge(usuario);
            emc.persist(usuario);
            emc.getTransaction().commit();
            return "Sucess";
        } catch (Exception e) {
            System.out.println(e);
            emc.getTransaction().rollback();
            return "Fail";
        }
    }

    public void update(Usuarios viejo, Usuarios nuevo, EntityManager em){
        em.getTransaction().begin();
        try{
            Query q = em.createQuery("UPDATE Usuarios s SET s.nombre = '" +
                    nuevo.getNombre() + "', s.password = '"+ nuevo.getPassword() +
                    "', s.roll = '"+ nuevo.getRoll() +
                    "' WHERE s.nombre = '" + viejo.getNombre() + "'");
            q.executeUpdate();
            em.getTransaction().commit();
        }catch(Exception e){
            System.out.println(e);
            em.getTransaction().rollback();
        }
    }
    
    public String delete(String nombre, EntityManager em){
        em.getTransaction().begin();
        try{
            Query q = em.createQuery("DELETE FROM Usuarios u WHERE u.nombre = '" + nombre + "'");
            q.executeUpdate();
            em.getTransaction().commit();
            return "Sucess";
        }catch(Exception e){
            System.out.println(e);
            em.getTransaction().rollback();
            return "Fail";
        }
    }
    
    public void delete(Usuarios usuario, EntityManager em){
        this.delete(usuario.getNombre(), em);
    }

    public Usuarios buscarNombre(String nombre, EntityManager em){
        try{
            Query q = em.createQuery("SELECT u FROM Usuarios as u WHERE u.nombre = '" + nombre + "'");
            return (Usuarios)q.getSingleResult();
        }catch(Exception e){
            System.out.println(e);
            return null;
        }
    }

    public List<Usuarios> getUsuarios(EntityManager em){
        try{
            Query q = em.createQuery("SELECT u FROM Usuarios as u");
            return q.getResultList();
        }catch(Exception e){
            System.out.println(e);
            return null;
        }
    }
}
